package com.sparkseries.service;


import com.sparkseries.domain.vo.SysDepartmentVO;
import com.sparkseries.dto.SysDepartmentDTO;
import com.sparkseries.common.util.domain.Result;

import java.util.List;

/**
 * 接口定义了与部门相关的业务操作
 */
public interface SysDepartmentService {

    /**
     * 创建部门
     *
     * @param sysDepartments 部门对象列表
     * @return 包含插入结果的 Result对象
     */
    Result<?> createDepartments(List<SysDepartmentDTO> sysDepartments);

    /**
     * 获取所有部门信息
     *
     * @return 包含所有部门信息的 Result对象
     */
    Result<List<SysDepartmentVO>> getAllDepart();

    /**
     * 删除多个部门（逻辑删除，设置 is_enabled 为 0）
     *
     * @param ids 部门ID列表
     * @return 包含删除结果的 Result对象
     */
    Result<?> deleteDepart(List<Integer> ids);

    /**
     * 更新部门信息
     *
     * @param sysDepartment 部门对象，包含需要更新的信息
     * @return 包含更新结果的 Result对象
     */
    Result<?> updateDepart(SysDepartmentDTO sysDepartment);

    /**
     * 根据部门ID获取部门信息
     *
     * @param id 部门ID
     * @return 包含部门信息的 Result对象
     */
    Result<SysDepartmentVO> getDepartById(Integer id);

    /**
     * 获取指定部门ID的所有子部门信息
     *
     * @param id 父部门ID
     * @return 包含直接子部门信息的 Result对象
     */
    Result<List<SysDepartmentVO>> getDirectChildren(Integer id);

    /**
     * 根据条件查询部门信息
     *
     * @param sysDepartment 包含查询条件的部门对象
     * @return 包含符合条件的部门信息的 Result对象
     */
    Result<List<SysDepartmentVO>> findDepartmentByCondition(SysDepartmentDTO sysDepartment);
}

